package com.jo.invocation;

import com.jo.interceptor.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;
import java.util.List;

/**
 * cglib实现的动态代理,集成了jdk的动态的功能，覆盖了调用原始方法的方法
 * 将jdk的Proxy.newInstance()改成调用cglib的代理方式。
 * @author Jo
 * @date 2018/1/25
 */
public class CglibMethodInvocation extends ReflectionMethodInvocation {

    private MethodProxy methodProxy;

    public CglibMethodInvocation(Object proxy, Object target, Method method, Object[] args, List<MethodInterceptor> methodInterceptors) {
        super(proxy, target, method, args, methodInterceptors);
    }

    /**
     * 重写调用原始方法
     */
    @Override
    protected Object invokeOriginal() throws Throwable {
        return methodProxy.invoke(this.target, this.args);
    }
}
